/**
 * 获取uuid
 */
export function getUUID() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
        return (c === 'x' ? (Math.random() * 16 | 0) : (Math.random() & 0x3 | 0x8)).toString(16)
    })
}

export const formatTime = (date: Date | string): string => {
    const d = new Date(date)
    const hours = d.getHours().toString().padStart(2, '0')
    const minutes = d.getMinutes().toString().padStart(2, '0')
    return `${hours}:${minutes}`
}

//聊天窗的时间格式化
/**
 * 根据时间差异规则格式化日期字符串
 * @param dateString ISO 8601格式的日期字符串（如2025-07-24T08:29:50.259Z）
 * @returns 格式化后的时间字符串
 */
export function formatTimeString(dateString: string): string {
    const inputDate = new Date(dateString);
    const now = new Date();

    // 获取本地时间的日期部分（忽略时间）
    const getDatePart = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());
    const inputDatePart = getDatePart(inputDate);
    const today = getDatePart(now);
    const yesterday = new Date(today);
    yesterday.setDate(yesterday.getDate() - 1);

    // 计算输入日期与今天的天数差
    const timeDiff = now.getTime() - inputDate.getTime();
    const daysDiff = Math.floor(timeDiff / (1000 * 3600 * 24));

    // 获取星期名称映射
    const weekdays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];

    // 时间部分始终使用24HH:MI格式
    const time = inputDate.toTimeString().substring(0, 5);

    // 按规则处理不同时间范围
    if (inputDatePart.getTime() === today.getTime()) {
        return time; // 当天显示时间
    } else if (inputDatePart.getTime() === yesterday.getTime()) {
        return `昨天 ${time}`; // 昨天
    } else if (daysDiff <= 7) {
        return `${weekdays[inputDate.getDay()]} ${time}`; // 七天内显示星期
    } else if (daysDiff <= 365) {
        return `${inputDate.getMonth() + 1}月${inputDate.getDate()}日 ${time}`; // 一年内显示月日
    } else {
        return `${inputDate.getFullYear()}年${inputDate.getMonth() + 1}月${inputDate.getDate()}日 ${time}`; // 超过一年
    }
}